# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/13 13:47 
@Author  : ZhangShenao 
@File    : gil_bacis.py 
@Desc    : GIL基础

GIL:Global Interpreter Lock,即全局解释器锁,是最流行的Python解释器CPython中的一个技术术语
它本质上是类似操作系统的Mutex
每一个Python线程,在CPython解释器中执行时,都会先锁住自己的线程,阻止别的线程执行

CPython引进GIL主要有以下两方面原因:
1. 为了规避类似于内存管理(对象应用计数)这样的复杂的竞争风险问题(race condition)
2. 因为CPython大量使用C语言库,而大部分C语言库都不是原生线程安全的(线程安全会降低性能和增加复杂度)

CPython中有一个check_interval机制
即CPython解释器会去轮询检查线程的GIL锁状态
每隔一段时间,CPython解释器就会强制当前线程去释放GIL,这样别的线程才能有执行的机会

即使有GIL机制,我也编程时也不应该依赖GIL机制来保证线程安全
因为Thread还有check_interval这样的抢占机制
因此,在设计并发操作时,一定要主动处理线程安全问题,如使用lock等工具

GIL的设计,主要是为了方便CPython解释器层面的编写者,而不是Python应用层面的程序员

在绝大多数情况下,我们都无需考虑GIL所带来的影响

如果一定要绕开GIL,有两种实现思路:
1. 绕过CPython,使用JPython(Java 实现的 Python 解释器)等其他的实现
2. 把关键性能代码,放到别的语言(一般是 C++)中实现,然后再提供Python的调用接口

"""
